package controllers

import (
	// "encoding/json"
	"fmt"
	"mars-backend/utils"
	"net/http"

	// model "mars-backend/models"

	"github.com/astaxie/beego"
	"gopkg.in/mgo.v2/bson"
)

type AdminController struct {
	beego.Controller
}

// 重置密码
func (uct *AdminController) PasswordReset() {
	paramMap := uct.Ctx.Input.Params()
	id := paramMap[":id"]

	var pwdNew string
	uct.Ctx.Input.Bind(&pwdNew, "password")

	if id == "" {
		uct.Ctx.Output.Status = http.StatusBadRequest
		uct.Ctx.Output.Body([]byte(`{"error":"id should not be none!"}`))
		return
	}

	session, err := utils.GetMongoSession()
	uct.HandleError(err)
	defer session.Close()

	// var user model.User
	utable := session.DB("").C(UserTable)
	// utable.Find(bson.M{"_id": bson.ObjectIdHex(id)}).One(&user)
	// user.Password = pwdNew  // update password
	utable.Update(bson.M{"_id":bson.ObjectIdHex(id)}, bson.M{"$set":bson.M{"password":pwdNew}})
	uct.Ctx.Output.Status = http.StatusOK
	uct.Ctx.Output.Body([]byte(`{"result":"update user passwd successfully!"}`))
}

//HandleError 错误处理函数
func (uct *AdminController) HandleError(err error) {

	if err != nil {
		fmt.Println(err.Error())
		uct.Ctx.Output.Status = http.StatusServiceUnavailable
		uct.Ctx.Output.Body([]byte(err.Error()))
		uct.StopRun()
	}

}

// for test
func (c *AdminController) AddTestUsers() {
	var size int
	c.Ctx.Input.Bind(&size, "size")
	if size==0 { // default add 1 user
		size=1
	}
	for i := 0; i < size; i++ {
		utils.AddUserToDB()
	}
	beego.Info("Create", size, "Users finished!")
	c.Ctx.Output.Status = http.StatusOK
}

// func (uct *AdminController) AddUserPage() {
// 	uct.TplName = "admin/user_add.html"
// }

// //admin页面更新用户
// func (uct *AdminController) UpdateUserPage() {
// 	paramMap := uct.Ctx.Input.Params()
// 	id := paramMap[":id"]
// 	beego.Info("id")
// 	beego.Info(string(id))
// 	if id == "" {
// 		uct.HandleError(fmt.Errorf("用户id不能为空"))
// 	}

// 	var result model.User

// 	var err error

// 	session, err := utils.GetMongoSession()
// 	uct.HandleError(err)
// 	defer session.Close()

// 	utable := session.DB("").C(UserTable)

// 	utable.Find(bson.M{"_id": bson.ObjectIdHex(id)}).One(&result)
// 	beego.Info("result")
// 	beego.Info(result)
// 	data, err := json.Marshal(result)

// 	var dat map[string]interface{}
// 	if err := json.Unmarshal([]byte(data), &dat); err == nil {
// 		uct.Data["UserInfo"] = dat
// 	}
// 	uct.Data["EducationAll"] = result.Education
// 	uct.Data["WorkAll"] = result.WorkExperience

// 	beego.Info("education")
// 	beego.Info(result.Education)
// 	uct.HandleError(err)
// 	uct.TplName = "admin/user_update.html"
// 	// uct.Ctx.Output.Body(data)
// }

// //admin 用户列表
// func (uct *AdminController) ListUsers() {
// 	// var userlist model.UsersList
// 	var limit int = 10 //default size
// 	uct.Ctx.Input.Bind(&limit, "limit")
// 	if limit == 0 {
// 		limit = 10
// 	}

// 	var page int = 1 //default
// 	uct.Ctx.Input.Bind(&page, "page")
// 	if page == 0 {
// 		page = 1
// 	}

// 	var result []*model.User

// 	var err error

// 	session, err := utils.GetMongoSession()
// 	uct.HandleError(err)
// 	defer session.Close()

// 	ctable := session.DB("").C(UserTable)
// 	// cursor := ctable.Find(bson.M{"isdelete": 0}).Sort("createtime").Limit(limit)
// 	cursor := ctable.Find(bson.M{"isdelete": 0}).Sort("createtime")

// 	cursor.All(&result)

// 	total, _ := ctable.Count()

// 	// userlist.Data = result
// 	// userlist.Total = total

// 	// data, err := json.Marshal(userlist)
// 	uct.HandleError(err)
// 	// uct.Ctx.Output.Body(data)
// 	uct.Data["UserList"] = result
// 	uct.Data["Total"] = total
// 	// var dat map[string]interface{}
// 	// if err := json.Unmarshal([]byte(data), &dat); err == nil {
// 	// 	uct.Data["UserList"] = userlist
// 	// }
// 	beego.Info("UserList")
// 	beego.Info(result)

// 	uct.TplName = "admin/userlist.html"
// }

// //分页获取users 默认 每页10个
// func (uct *AdminController) Dashboard() {
// 	var userlist model.UsersList
// 	var limit int = 10 //default size
// 	uct.Ctx.Input.Bind(&limit, "limit")
// 	if limit == 0 {
// 		limit = 10
// 	}

// 	var page int = 1 //default
// 	uct.Ctx.Input.Bind(&page, "page")
// 	if page == 0 {
// 		page = 1
// 	}

// 	var result []*model.User

// 	var err error

// 	session, err := utils.GetMongoSession()
// 	uct.HandleError(err)
// 	defer session.Close()

// 	ctable := session.DB("").C(UserTable)
// 	cursor := ctable.Find(bson.M{"isdelete": 0}).Sort("createtime").Skip(limit*page + 1).Limit(limit)

// 	cursor.All(&result)

// 	total, _ := ctable.Count()

// 	userlist.Data = result
// 	userlist.Total = total

// 	// data, err := json.Marshal(userlist)
// 	uct.HandleError(err)
// 	// uct.Ctx.Output.Body(data)
// 	// var dat map[string]interface{}
// 	// if err := json.Unmarshal([]byte(data), &dat); err == nil {
// 	// 	uct.Data["UserList"] = dat
// 	// }
// 	// beego.Info("dat")
// 	// beego.Info(dat)
// 	uct.TplName = "admin/dashboard.html"
// }


